package com.xb.loan.fund.service;


import com.xb.loan.fund.service.bean.CashEncashRecVO;
import com.xb.loan.fund.service.bean.CashEncashVO;
import com.xb.loan.fund.service.bean.EncashResultVO;
import com.xb.loan.log.exception.BizException;

import java.util.List;
import java.util.Map;

/**
 * 提现接口(提现、提现结果、提现查询等)
 */
public interface ICashEncashService {
	/**
     * 提现
     * @param cashEncashVO      提现订单
     * @return    
     * @throws BizException
     */
    public CashEncashVO encash(CashEncashVO cashEncashVO) throws BizException;

    /**
     * 提现结果
     * @param encashResultVO 
     * @throws BizException
     */
    public void encashResult(EncashResultVO encashResultVO) throws BizException;

    /**
     * 
     * 提现审核
     * @param encashId      提现编码
     * @param approveState  审核状态  1：审核通过、2：审核不通过
     * @param approveDesc   审核描述
     * @throws BizException
     */
    public void encashApprove(String encashId, int approveState, String approveDesc) throws BizException;
    
    /**
     * 删除提现订单
     * @param encashId      提现订单ID
     * @return    
     * @throws BizException
     */
    public int deleteEncashOrder(String encashId) throws BizException;
    
    /**
     * 向收银台提交提现订单
     * @param encashId 提现订单ID
     * @return
     * @throws BizException
     */
    public int submitCashEncash(String encashId) throws BizException;

    /**
     * 修改提现订单的对账状态
     * @param encashId
     * @param accountStatus
     * @return
     * @throws BizException
     */
    public int updateAccountStatus(String encashId, int accountStatus) throws BizException;

    /**
     * 清除某天提现的对账结果，以便重复对账
     * @param accountPeriod
     */
    public void clearAccountStatus(String accountPeriod);
    
    /**
     * 根据条件分页查询提现记录
     * @param userId 用户编码
     * @param status 订单状态
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @param pageNum 当前页数
     * @param numPerPage 每一页显示记录条数
     * @return
     * @throws BizException
     */
    public List<CashEncashVO> queryCashEncash(String userId,
                                              Integer status, String startDate, String endDate, int pageNum, int numPerPage) throws BizException;

    /**
     * 按天、分渠道统计提现信息
     * @param params
     * @return
     */
    public List<Map<String,Object>> statEncashDay(Map<String, Object> params);

    /**
     * 根据条件查询条件下总记录
     * @param userId 用户编码
     * @param status 订单状态
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return
     * @throws BizException
     */
    public int queryCashEncashCount(String userId,
                                    Integer status, String startDate, String endDate) throws BizException;

    public CashEncashVO queryCashEncashById(String encashId) throws BizException;

    /**
     * 查询符合条件的提现订单（不分页）
     * @param accountPeriod
     * @param accountStatus
     * @param status
     * @return
     * 2016年6月14日 by wenju.song
     */
    public List<CashEncashVO> queryAllCashEncash(String accountPeriod, Integer accountStatus, Integer status);

    /**
     * 查询所有符合条件的提现记录-带数据权限
     * @param userId
     * @param status
     * @param startDate
     * @param endDate
     * @param accessSQL
     * @param pageNum
     * @param numPerPage
     * @return
     * 2015年11月19日 by zhangyi
     */
    public List<Map<String,Object>> queryCashEncashAccess(String userId, String status,
                                                          String startDate, String endDate, String accessSQL, int pageNum, int numPerPage);

    /**
     * 查询所有符合条件的提现记录数量-带数据权限
     * @param userId
     * @param status
     * @param startDate
     * @param endDate
     * @param accessSQL
     * @return
     * 2015年11月19日 by zhangyi
     */
    public int queryCashEncashCountAccess(String userId, String status,
                                          String startDate, String endDate, String accessSQL);

    /**
     * 查询用户还有未完成提现的订单笔数
     * @param accountId
     * @return
     * @throws BizException
     */
    public int queryCashEncashByAccountId(String accountId) throws BizException;

    /**
     * 按用户类型时间查询用户提现
     */
    public List<CashEncashRecVO> queryCashEncashRec(Integer userType, String startTime, String endTime,
                                                    int pageNum, int numPerPage) throws BizException;

    /**
     * 按用户类型时间查询用户提现总记录数
     */
    public int queryCashEncashRecCount(Integer userType, String startTime, String endTime) throws BizException;

}
